package cn.edu.jnu.booklistmainactivity;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

import cn.edu.jnu.booklistmainactivity.data.BookItem;


/**
 * @author Administrator
 */

public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.MyHolder>  {//2.2设计recycleview控件适配器,包括item视图的布局和数据内容都需要在适配器中定义出来
    //表明holder是adapter的内部类
    private ArrayList<BookItem> book_list;
    private Context context;

    SearchAdapter(ArrayList<BookItem>book_list, Context context){//待会在activity的oncreate中需要用到
        this.book_list=book_list;//从主页传过来的
        this.context=context;//因为和主页分离了，所以需要获取主页上下文
    }//只是为了得到book_list的长度

    @NonNull
    @Override
    public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //定义布局
        View v1=View.inflate(context,R.layout.bookitem,null);
        //或者View v1= LayoutInflater.from(xxActivity.this).inflate(R.layout.itemlayout,parent,false);

        return new MyHolder(v1);
    }

    //使用viewholder得到数据并修改数据,适配器和holder连接起来
    @Override
    public void onBindViewHolder(@NonNull MyHolder holder, int position) {
        holder.getImageViewImage().setBackgroundResource(book_list.get(position).getImageId());//设置图片用setbackground/imagesource
        holder.getTextView().setText(book_list.get(position).getBookName());//不能用[position],因为这是列表，不是数组
        holder.getWritername().setText(book_list.get(position).getWriterName());
        holder.getPublishhouse().setText(book_list.get(position).getPublishingHouse());
        holder.getyearTime().setText(book_list.get(position).getPublishyear());
        holder.getMonthtime().setText(book_list.get(position).getPublishmonth());
    }

    @Override
    public int getItemCount() {//先写这个函数，上面两个函数才有得写(最重要了)
        return book_list==null?0:book_list.size();
    }//先执行这个，得到长度(position的变化范围)

    //public内部类，不用也ok  //viewholder:携带xx布局的数据,holder:存东西的
    public class MyHolder extends RecyclerView.ViewHolder{
        //定义需要赋值的控件对象
        private ImageView image;//一般属性都定义为私有,如果定义为私有就需要多加一些函数让onBindViewHolder可以访问这些属性
        private TextView title;
        private TextView writername;
        private TextView publishhouse;
        private TextView yeartime;
        private TextView monthtime;

        public MyHolder(@NonNull View itemView) {
            super(itemView);////父类容器，不调用可能有些事件读取不到 和button的重写方法一样(如果是通过继承实现的话)都需要super(View)
            image=itemView.findViewById(R.id.image_view_book_cover);//赋值,上下移动的时候item项应该会自动来这样子调用修改
            title=itemView.findViewById(R.id.text_view_book_title);
            writername=itemView.findViewById(R.id.text_view_book_writer);
            publishhouse=itemView.findViewById(R.id.text_view_book_publish_house);
            yeartime=itemView.findViewById((R.id.text_view_book_yeartime));
            monthtime=itemView.findViewById(R.id.text_view_book_monthtime);

            //点击事件
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(onitemlistener!=null){
                        onitemlistener.itemclick(getAdapterPosition());
                    }
                }
            });
        }
        public TextView getTextView() {
            return title;
        }//因为这些是私有成员，所以需要提供一个外界可以获取的方法
        public ImageView getImageViewImage() {
            return image;
        }
        public TextView getWritername() {return writername;}
        public TextView getPublishhouse() {return publishhouse;}
        public TextView getyearTime() {return yeartime;}
        public TextView getMonthtime() {
            return monthtime;
        }
    }

    //为了搜索:给适配器设置过滤器
    public void setFilter(ArrayList<BookItem> filterBooks){
        if(filterBooks.isEmpty()){//动态数组只要创建了就不会为null了，神奇，必须用这个方法
            return;//相当于没改变
        }
        book_list=filterBooks;

    }

    //在adapter类 自定义写一个接口监听事件,
    public interface Onitemlistener{
        void itemclick(int position);
    }
    //创建一个接口对象
    private Onitemlistener onitemlistener;

    //创建一个设置监听的方法,然后去主页设置
    public void setitemlistener(Onitemlistener onitemlistener){
        this.onitemlistener=onitemlistener;
    }

}
